package com.example.scheduler;

import java.util.List;

/**
 * DagTemplateManager：保存若干预置的DAG模板，供任务选择使用。
 * 示例：DAGTEMPLATE_1，DAGTEMPLATE_2
 */
public class DagTemplateManager {

    // 模板1：taskA、taskB无依赖；taskC依赖A；taskD依赖A和B；taskE依赖C和D
    public static final DagTemplate DAGTEMPLATE_1;
    // 模板2：taskX无依赖；taskY依赖X；taskZ依赖Y；(线性依赖)
    public static final DagTemplate DAGTEMPLATE_2;

    static {
        // 构造DAGTEMPLATE_1
        DAGTEMPLATE_1 = new DagTemplate("DAG_1");
        DAGTEMPLATE_1.addTask("taskA");
        DAGTEMPLATE_1.addTask("taskB");
        DAGTEMPLATE_1.addTask("taskC");
        DAGTEMPLATE_1.addTask("taskD");
        DAGTEMPLATE_1.addTask("taskE");
        // 添加依赖
        DAGTEMPLATE_1.addDependency("taskA", "taskC");
        DAGTEMPLATE_1.addDependency("taskA", "taskD");
        DAGTEMPLATE_1.addDependency("taskB", "taskD");
        DAGTEMPLATE_1.addDependency("taskC", "taskE");
        DAGTEMPLATE_1.addDependency("taskD", "taskE");

        // 构造DAGTEMPLATE_2（线性依赖：X->Y->Z）
        DAGTEMPLATE_2 = new DagTemplate("DAG_2");
        DAGTEMPLATE_2.addTask("taskX");
        DAGTEMPLATE_2.addTask("taskY");
        DAGTEMPLATE_2.addTask("taskZ");
        DAGTEMPLATE_2.addDependency("taskX", "taskY");
        DAGTEMPLATE_2.addDependency("taskY", "taskZ");
    }

    /**
     * 根据 templateId 获取对应的DAG模板
     * @param templateId 传入 "DAG_1" 或 "DAG_2"
     */
    public static DagTemplate getTemplateById(String templateId) {
        switch (templateId) {
            case "DAG_1":
                return DAGTEMPLATE_1;
            case "DAG_2":
                return DAGTEMPLATE_2;
            default:
                return null; // or throw exception
        }
    }
}